/* 
    Promise 是一个构造函数，本身是有一个方法
    1. all  可以一次性的处理多个异步请求，只有都成功了才 resolve
    2. race（比赛 输赢） 可以一次性的处理多个异步请求，只要执行最快的哪个异步操作resolve即可，其他的就不管

    下面一般在工具方法里面使用
    3. resolve （成功的处理）
    4. reject （失败的处理）
*/

/* 
    现在使用 Promise + fs 完成回调地狱的问题

    需求：有三个文件 data/1.txt(1) data/2.txt(2) data/3.txt(3) 希望可以顺序的读取 1.txt 2.txt 3.txt 的内容。
翻译：
    1. 先读 1.txt
    2. 读完之后，在读 2.txt
    3. 读完之后，在读 3.txt

*/

const fs = require('fs');


const p1 = new Promise((resolve, reject) => {
    fs.readFile('./data/1.txt', 'utf8', (err, data) => {
        if (err) {
            reject(err);
        } else {
            resolve(data);
        }
    });
})


const p2 = new Promise((resolve, reject) => {
    fs.readFile('./data/2.txt', 'utf8', (err, data) => {
        if (err) {
            reject(err);
        } else {
            resolve(data);
        }
    });
})


const p3 = new Promise((resolve, reject) => {
    fs.readFile('./data/3.txt', 'utf8', (err, data) => {
        if (err) {
            reject(err);
        } else {
            resolve(data);
        }
    });
})

/* 
    可以在测试网络的功能的时候使用
    
 */
Promise.race([p1, p2, p3]).then((data) => {
    console.log(data);
}).catch((err) => {
    console.log(err)
});